package com.it.boot.entity;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import javax.persistence.*;

/**
 * 前端异常日志实体类
 *
 * <p>建议扩展方向：
 * 1. 添加错误级别字段(level)区分严重程度
 * 2. 增加用户ID字段(userId)关联具体用户
 * 3. 添加地理位置字段(geoInfo)
 * 4. 考虑分表策略应对大数据量</p>
 */
@Schema(title = "前端异常日志记录")
@Data
@Entity
@Table(name = "sys_error_log") // 显式指定表名
public class SysErrorLogEntity {

    /**
     * 主键ID
     *
     * <p>生成策略说明：
     * - IDENTITY: 依赖数据库自增
     * - 高并发场景可考虑SNOWFLAKE算法</p>
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Schema(title = "主键ID")
    private Long id;

    /**
     * 错误类型分类
     *
     * <p>建议值：
     * - JS_ERROR: JavaScript运行时错误
     * - VUE_ERROR: Vue组件错误
     * - API_ERROR: 接口调用错误
     * - NETWORK_ERROR: 网络错误</p>
     */
    @Column(length = 50)
    @Schema(title = "错误类型分类", example = "API_ERROR")
    private String type;

    /**
     * 错误简要信息
     *
     * <p>存储建议：
     * - 截断过长的错误消息
     * - 敏感信息脱敏处理</p>
     */
    @Column(length = 500)
    @Schema(title = "错误信息")
    private String message;

    /**
     * 完整错误堆栈
     *
     * <p>存储优化建议：
     * - 可压缩存储
     * - 生产环境建议异步解析</p>
     */
    @Lob  // 大文本字段
    @Schema(title = "错误堆栈")
    private String stackTrace;

    /**
     * 平台标识
     *
     * <p>常见值：
     * - H5: 网页端
     * - WECHAT_MP: 微信小程序
     * - ANDROID: 安卓App
     * - IOS: iOS App</p>
     */
    @Column(length = 50)
    @Schema(title = "客户端平台信息")
    private String platform;

    @Column(name = "client_ip")
    @Schema(title = "客户端IP")
    private String clientIp;

}